
#ifndef CDRTDEAPI_H
#define CDRTDEAPI_H

#include <stdlib.h>
#include <stdint.h>
#include "cdrtdebasedefine.h"

#ifdef __cplusplus
extern "C" {
#endif


/*
用户函数，创建rtde连接
输入参数：
rtdeHandle：返回rtde句柄
ip：ip地址
version：协议版本
返回值：
0-正常；其他-错误
*/
RtdeResult cd_rtde_create(RtdeHandle *rtdeHandle,const char *ip,int64_t version);


/*
用户函数，关闭rtde连接
输入参数：
rtdeHandle：rtde句柄
返回值：
0-正常；其他-错误
*/
RtdeResult cd_rtde_destroy(RtdeHandle rtdeHandle);



/*
用户函数，获取SDK版本号
输入参数：
version：返回版本号
返回值：
0-正常；其他-错误
*/
RtdeResult cd_rtde_get_sdk_version(uint8_t* version);

/*
用户函数，配置输出配方，控制器只记住最新一条输出配方
输入参数：
rtdeHandle：rtde句柄
varNames：输出变量名
frequency：输出频率
recipeId：返回输出配方ID
返回值：
0-正常；其他-错误
*/
RtdeResult cd_rtde_output_setup(RtdeHandle rtdeHandle, char *varNames, int frequency,int *recipeId);


/*
用户函数，输出数据控制
输入参数：
rtdeHandle：rtde句柄
recipeId：配方ID
control： 1开始  2-停止
返回值：
0-正常；其他-错误
*/
RtdeResult cd_rtde_output_control(RtdeHandle rtdeHandle,uint32_t recipeId,int control);

/*
用户函数，接收输出数据
输入参数：
rtdeHandle：rtde句柄
recipeId：配方ID
data：输出数据指针
返回值：
0-正常；其他-错误
*/
RtdeResult cd_rtde_output_data_receive(RtdeHandle rtdeHandle,uint32_t recipeId,void *data);

/*
用户函数，设置速度百分比
输入参数：
rtdeHandle：rtde句柄
percentVelocity：速度百分比
返回值：
0-正常；其他-错误
*/
RtdeResult cd_rtde_percentvelocity_set(RtdeHandle rtdeHandle,double percentVelocity);

//方法
/*
用户函数，关节透传运动
输入参数：
jointPose：关节给定位置（°）
exjNum: 关节数量
exjPose：外部轴给定位置（°/mm）
cutoff_freq：滤波截止频率（rad/s）
返回值：
0-正常；其他：-错误
*/
RtdeResult cd_rtde_servoj(RtdeHandle rtdeHandle,double jointPose[6],uint8_t exjNum,double *exjPose,double cutoffFreq);

/*
用户函数，停止关节透传运动
输入参数：
rtdeHandle：rtde句柄
deceleration：关节降速的加速度值（°/s²）
返回值：
0-正常；其他：-错误
注：当前版本加速度值未生效
*/
RtdeResult cd_rtde_servo_stop(RtdeHandle rtdeHandle,double deceleration);


/*
用户函数，重置错误
输入参数：
rtdeHandle：rtde句柄
返回值：
0-正常；其他：-错误
*/
RtdeResult cd_rtde_reseterror(RtdeHandle rtdeHandle);

#ifdef __cplusplus
}
#endif

#endif /* CDRTDEAPI_H */
